package com.zimmur.dao.account;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.zimmur.model.account.UserMessage;
import com.zimmur.model.account.UserMessageParameter;
import com.zimmur.model.account.view.UserMessageView;

public interface IUserMessageDao {

    int deleteByPrimaryKey(Long messageId);

    int insertSelective(UserMessage record);

    UserMessage selectByPrimaryKey(Long messageId);

    int updateByPrimaryKeySelective(UserMessage record);
    
    /**
     * 获取分页消息 单个模块
     * @param parameter
     * @return
     */
    List<UserMessageView> selectPageListByUserIdIncludeModule(UserMessageParameter parameter);
    /**
     * 获取分页消息不含某单个模块
     * @param parameter
     * @return
     */
    List<UserMessageView> selectPageListByUserIdExcludeModule(UserMessageParameter parameter);
    /**
     * 获取记录数不含某单个模块
     * @param parameter
     * @return
     */
    int selectPageListByUserIdExcludeModuleCount(UserMessageParameter parameter);
    /**
     * 获取记录数
     * @param parameter
     * @return
     */
    int selectPageListByUserIdCount(UserMessageParameter parameter);
    
    List<UserMessage> selectListByIsPush(int isPush);
    
    int updateMessagePushStatusByIds(List<UserMessage> list);
    /**
     * 更新单个用户消息已读状态
     * @param userMessage
     * @return
     */
    int updateMessageReadStatus(UserMessage userMessage);   
    //获取用户当前未读消息数量
    int selectCountByUserIdNoneRead(long userId);
    /**
     * 通过userId和消息类别——categoryCode，查询用户的消息
     * @param userId
     * @param categoryCode
     * @param first
     * @param size
     * @return
     */
    List<UserMessageView> selectMessageByUserIdAndCode(@Param("userId")long userId,@Param("categoryCode")String categoryCode,
    		@Param("first")Integer first,@Param("size")Integer size);
    /**
     * 查询消息总数
     * @param userId
     * @param categoryCode
     * @return
     */
    int countMessageByUserIdAndCode(@Param("userId")long userId,@Param("categoryCode")String categoryCode);
    /**
     * 批量添加用户消息
     * @param userMessages
     * @return
     */
    int addMessageList(@Param("messageList")List<UserMessage> messageList);
    /**
     * 批量更新消息为已读消息
     * @param messageIds
     * @param unixTime
     * @return
     */
    int updateMessagesIsRead(@Param("messageIds")List<Long> messageIds,@Param("time")int unixTime);
}